#pragma once

#include <QGraphicsTextItem>
#include <QPen>

class QFocusEvent;
class QGraphicsItem;
class QGraphicsScene;
class QGraphicsSceneMouseEvent;
class box;

/*! \class diagramTextItem
    \brief Класс текстовго поля.
*/
class diagramTextItem : public QGraphicsTextItem
{
	Q_OBJECT

public:
	enum { Type = UserType + 5 };				//!< Тип элемента "Текстовое поле"

	/*! Конструктор с параметрами
		\param parent Указатель на родительский элемент
		\param scene Указатель на графическую сцену
	*/
	diagramTextItem(QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);
	
	/*! Конструктор с параметрами
		\param pos Позиция на которой будет размещен элемент
		\param text Текст элемента
		\param parent Указатель на родительский элемент
		\param scene Указатель на графическую сцену
	*/
	diagramTextItem(QPointF pos, QString text, QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);
    
	/*! Обрезает слишком длинный текст
	*/
	void cutOffText();
    
	/*! Возвращает тип элемента "Текстовое поле"
		\return Тип элемента
	*/
	int type() const{ return Type;}

signals:
	void lostFocus(diagramTextItem *item);		//!< Сигнал "Потерян фокус"
	void selectedChange(QGraphicsItem *item);	//!< Сигнал "Выделение изменено"

public:
        QString mText;							//!< Полный текст поля.

protected:
        
	/*! Обработчик изменений поля
		Выделяет ассоциированную стрелку для поля, принадлежащего стрелке.
    */
	QVariant itemChange(GraphicsItemChange change, const QVariant &value);

    /*! Обработчик события "потеря фокуса" для текстового поля
    Вызывает обновление полей родителя
    Укорачивает слишком длинный текст, задавая при этом всплывающую подсказку
    */
	void focusOutEvent(QFocusEvent *event);

    /*! Обработчик события "двойной клик" для текстового поля
    Переводит поле в режим редактирования
    */
	void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);

	/*! Обработчик события "нажатие клавиши" для текстового поля
	Обрабатывает клавиатурный ввод
    */
	void keyPressEvent ( QKeyEvent * event );
};
